Allow absent git version
authorYehuda Katz <wycats@gmail.com>
Tue, 24 Jun 2014 00:38:43 +0000 (17:38 -0700)
committerYehuda Katz <wycats@gmail.com>
Tue, 24 Jun 2014 00:38:50 +0000 (17:38 -0700)
src/cargo/core/dependency.rs
src/cargo/core/resolver.rs
src/cargo/core/version_req.rs
src/cargo/util/toml.rs
tests/test_cargo_compile_git_deps.rs

index 07ac11ace1b0417a340c75245dba51a074fae29f..687e4911642a886ed1d8d13168d856eb2380e389 100644 (file)
@@ -19,12 +19,18 @@ impl Dependency {
         }
     }
 
-    pub fn parse(name: &str, version: &str,
+    pub fn parse(name: &str, version: Option<&str>,
                  namespace: &SourceId) -> CargoResult<Dependency> {
+
+        let version = match version {
+            Some(v) => try!(VersionReq::parse(v)),
+            None => VersionReq::any()
+        };
+
         Ok(Dependency {
             name: name.to_str(),
             namespace: namespace.clone(),
-            req: try!(VersionReq::parse(version)),
+            req: version
         })
     }
 
index e212478132d85fc7fae2c1d80f34dfc637c83814..e7d04427f15def437279d836136716ba7878d293 100644 (file)
@@ -85,7 +85,7 @@ mod test {
             let url = url::from_str("http://example.com").unwrap();
             let source_id = SourceId::new(RegistryKind, url);
             let d: Vec<Dependency> = vec!($($deps),+).iter().map(|s| {
-                Dependency::parse(*s, "1.0.0", &source_id).unwrap()
+                Dependency::parse(*s, Some("1.0.0"), &source_id).unwrap()
             }).collect();
             Summary::new(&PackageId::new($name, "1.0.0",
                                          "http://www.example.com/"),
@@ -107,7 +107,7 @@ mod test {
     fn dep(name: &str) -> Dependency {
         let url = url::from_str("http://example.com").unwrap();
         let source_id = SourceId::new(RegistryKind, url);
-        Dependency::parse(name, "1.0.0", &source_id).unwrap()
+        Dependency::parse(name, Some("1.0.0"), &source_id).unwrap()
     }
 
     fn registry(pkgs: Vec<Summary>) -> Vec<Summary> {
index d001d9c8dd564dd4695d8e740009f192163535d5..75a5b0df67d3a2b3a99d21892081fb8b5a6c4112 100644 (file)
@@ -34,6 +34,10 @@ struct PredBuilder {
 
 
 impl VersionReq {
+    pub fn any() -> VersionReq {
+        VersionReq { predicates: vec!() }
+    }
+
     pub fn parse(input: &str) -> CargoResult<VersionReq> {
         let mut lexer = Lexer::new(input);
         let mut builder = PredBuilder::new();
index 9ae5c023daf1e680ab2d929b643083127f2dcaaf..69eac3c8cd749b00a66d30cd06b343269083873c 100644 (file)
@@ -68,7 +68,7 @@ pub enum TomlDependency {
 
 #[deriving(Encodable,Decodable,PartialEq,Clone,Show)]
 pub struct DetailedTomlDependency {
-    version: String,
+    version: Option<String>,
     path: Option<String>,
     git: Option<String>,
 }
@@ -119,7 +119,7 @@ impl TomlManifest {
                 for (n, v) in dependencies.iter() {
                     let (version, source_id) = match *v {
                         SimpleDep(ref string) => {
-                            (string.clone(), SourceId::for_central())
+                            (Some(string.clone()), SourceId::for_central())
                         },
                         DetailedDep(ref details) => {
                             let new_source_id = details.git.as_ref().map(|git| {
@@ -142,7 +142,7 @@ impl TomlManifest {
                     };
 
                     deps.push(try!(Dependency::parse(n.as_slice(),
-                                                     version.as_slice(),
+                                                     version.as_ref().map(|v| v.as_slice()),
                                                      &source_id)))
                 }
             }
index 3ffa6e7e96ec42e547ebe971f7ddbb121d904b50..a89fd713551470688ec7277f038cf4533efc75f5 100644 (file)
@@ -73,7 +73,6 @@ test!(cargo_compile_simple_git_dep {
 
             [dependencies.dep1]
 
-            version = "0.5.0"
             git = "file://{}"
 
             [[bin]]